/**
 * 给定X和Y，任意顺序任意操作次数：
 * 1. 将X和Y都乘以一个数
 * 2. 将X和Y都除以一个公因子
 * 问使得操作之后的(X, Y)落在[L, R]区间内，一共有多少种不同的数对满足条件。
 * 由于可以任意顺序任意操作，因此直接将X和Y变为最小，即令 X/=gcd, Y/=gcd
 * 然后再乘即可。如此可以保证一定能够得到所有能得到的数。
 * 然后再计算一下范围即可。
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;

llt X, Y;
llt L, R;

llt proc(){
    if(X > Y) swap(X, Y);

    llt g = __gcd(X, Y);
    X /= g, Y /= g;

    llt ans = 0;
    llt as = L / X, ae = R / X;
    llt be = R / Y, bs = L / Y;
    if(as * X < L) ++as;
    if(bs * Y < L) ++bs;
    assert(ae * X <= R and be * Y <= R);
    auto s = max(as, bs);
    auto e = min(ae, be);
    ans += max(0LL, e - s + 1);
    return ans;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    cin >> X >> Y >> L >> R;
    cout << proc() << endl;
    return 0;
}
